class MyPriorityQueue(object):
    def __init__(self,key,reverse=True):
        self.PQueue =[]
        #reverse True是降序，False是升序
        self.reverse = reverse

        #key也是接受一个函数，不同的是，这个函数只接受一个元素,形式如下
        #def f(a):
        #return len(a)

        #确定要比较的优先级函数
        self.key = key

    #返回当前长度
    def __len__(self):
        return len(self.PQueue)

    #实现迭代器
    def __iter__(self):
        for obj in self.PQueue:
            yield obj

    #将元素放在第一个位置
    def push(self,element):
        self.PQueue.insert(0,element)
    #将元素加入置列表后
    def append(self,element):
        self.PQueue.append(element)
        #进行稳定排序
        self.PQueue=sorted(self.PQueue,key=self.key,reverse = self.reverse)

    #得到第一个元素，不弹出
    def getStart(self):
        return self.PQueue[0]
    #得到最后一个元素，不弹出
    def getEnd(self):
        return self.PQueue[-1]

    #弹出第一个元素
    def popStart(self):
        return self.PQueue.pop(0);
    #弹出最后一个元素
    def popEnd(self):
        return self.PQueue.pop(-1);
    #弹出指定的位置的元素
    def pop(self,index):
        return self.PQueue.pop(index)
    #清除指定元素
    def remove(self,element):
        try:
            self.PQueue.remove(element)
            return True
        except:
            print('要移除的数据不存在')
            return False

    #判空
    def isEmpty(self):
        return len(self.PQueue) == 0


